//axios的配置
import axios from "axios"

//引入ElementUI中的全局提示方法
// import ElementUI from "element-ui"
// console.log(ElementUI);
import { MessageBox,Message,Loading } from "element-ui"
import storage from "./storage"

//引入进度条
import nprogress from "nprogress"
import 'nprogress/nprogress.css'

//对axios进行一些简单的配置

//axios的公共配置
let http = axios.create({
    withCredentials:true,//是否携带本地凭证
    baseURL:"/api",//基础地址
    timeout:1000 * 15,//超时设置
})


//全局的请求拦截器  对接口的请求批量进行统一处理

let fullScreenLoading = null;
http.interceptors.request.use(config => {
    nprogress.start()//进度条出现



    let token = storage.get("sasa-token");
    // console.log(token);
    config.headers['authorization'] = token;
    
    // if (token) {
    //     config.headers.authorization = token;
    // }

    //登入的时候打开加载动画
    console.log(config);

     //关键字 login wechatLogin
     if(config.url.indexOf('login') !== -1 || config.url.indexOf('wechatLogin') !== -1){
        fullScreenLoading = Loading.service({
            lock: true,
            text: '加载中...',
            spinner: 'el-icon-loading',
            background: 'rgba(0, 0, 0, 0.7)'
        })
     }
 
    return config  //放行 如果不return 那么不能将请求真正的发送出去

})


//响应拦截  统一对错误进行处理
http.interceptors.response.use(config => {
    nprogress.done() //进度条消失


    // console.log(config);
    if(fullScreenLoading){
        fullScreenLoading.close()
        fullScreenLoading = null;
    }


    //嵌套解构语法
    // let { data: { state,msg}} = config
    let { state , msg } = config.data
    if(!state && config.config.url !== "/order/query_order_status"){
        //全局提示
        //后台响应了错误的结果
        // MessageBox.alert(msg,'错误提示',{type:"error"})
        MessageBox({
            message:msg,
            title:'错误提示',
            type:'error'
        })
    }
    // 10022 1004 这两个状态码分别对应了token过期和session过期
    // 10026 没有权限
    // 清掉本地缓存 清掉token
    let { code } = config.data;
    if(code === '10022' || code === '1004'){
        Message.error('登入过期,请重新登入')
        storage.rm('sasa-token')
        location.reload()
    }

    return config  //放行 如果不return axios请求就拿不到响应结果

})



export default http;